﻿// CSellDlg.cpp: 实现文件
//

#include "pch.h"
#include "MFCSaleSystem.h"
#include "CSellDlg.h"
#include "InfoFile.h"

// CSellDlg

IMPLEMENT_DYNCREATE(CSellDlg, CFormView)

CSellDlg::CSellDlg()
	: CFormView(DIALOG_SELL)
	, m_price(0)
	, m_left(0)
	, m_num(0)
	, m_sellInfo(_T(""))
{

}

CSellDlg::~CSellDlg()
{
}

void CSellDlg::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_COMBO2, m_combo);
	DDX_Text(pDX, IDC_EDIT1, m_price);
	DDX_Text(pDX, IDC_EDIT5, m_left);
	DDX_Text(pDX, IDC_EDIT6, m_num);
	DDX_Text(pDX, IDC_EDIT2, m_sellInfo);
}

BEGIN_MESSAGE_MAP(CSellDlg, CFormView)
	ON_CBN_SELCHANGE(IDC_COMBO2, &CSellDlg::OnCbnSelchangeCombo2)
	ON_BN_CLICKED(IDC_BUTTON1, &CSellDlg::OnBnClickedButton1)
	ON_BN_CLICKED(IDC_BUTTON3, &CSellDlg::OnBnClickedButton3)
END_MESSAGE_MAP()


// CSellDlg 诊断

#ifdef _DEBUG
void CSellDlg::AssertValid() const
{
	CFormView::AssertValid();
}

#ifndef _WIN32_WCE
void CSellDlg::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif
#endif //_DEBUG


// CSellDlg 消息处理程序


void CSellDlg::OnInitialUpdate()
{
	CFormView::OnInitialUpdate();

	// TODO: 在此添加专用代码和/或调用基类
	//初始化销售订单
	//初始化下拉框
	CInfoFile file;
	//把商品读到对象中
	file.ReadDocline();
	for (list<msg>::iterator it = file.ls.begin(); it != file.ls.end(); it++) {
		//遍历商品容器，把容器名称放到下拉框
		//string 转成 CString,并放到下拉框
		m_combo.AddString(CString(it->name.c_str()));
	}
	//默认选中第一个
	m_combo.SetCurSel(0);
	//更新第一个商品信息，因为第一次不触发
	OnCbnSelchangeCombo2();
}


void CSellDlg::OnCbnSelchangeCombo2()
{
	// TODO: 在此添加控件通知处理程序代码
	//切换商品触发的事件
	//先获取到商品名称
	int index = m_combo.GetCurSel();
	//根据索引获取到具体内容
	CString name;
	m_combo.GetLBText(index, name);
	//根据商品名称获取到该商品的价格和库存，并且显示到控件中
	CInfoFile file;
	//把商品读到对象中
	file.ReadDocline();
	for (list<msg>::iterator it = file.ls.begin(); it != file.ls.end(); it++) {
		if (CString(it->name.c_str()) == name) {
			m_price = it->price;
			m_left = it->num;
			//同步到控件
			UpdateData(FALSE);
		}
	}
	

}

//购买的功能实现
void CSellDlg::OnBnClickedButton1()
{

	//获取最新的控件数据
	UpdateData(TRUE);
	// TODO: 在此添加控件通知处理程序代码
	if (m_num <= 0) {
		MessageBox(TEXT("购买数量要大于0"));
		return;
	}
	if (m_num > m_left) {
		MessageBox(TEXT("购买的数量不能超过库存量"));
	}
	//购买
	//先获取到具体要买的商品名称
	int index = m_combo.GetCurSel();
	CString name;
	m_combo.GetLBText(index, name);
	CInfoFile file;
	file.ReadDocline();
	for (list<msg>::iterator it = file.ls.begin(); it != file.ls.end(); it++) {
		if (CString(it->name.c_str()) == name) {
			//同步库存量
			it->num -= m_num;
			//同步控件显示的库存量
			m_left = it->num;
			//告诉用户具体的购买信息
			CString str;
			str.Format(_T("商品：%s \r\n单价：%d \r\n个数：%d \r\n总价：%d"), name, m_price, m_num, m_price * m_num);
			m_sellInfo = str;
			file.WirteDocline();
			UpdateData(FALSE);
			MessageBox(_T("购买成功"));
			break;
		}
	}
	//清空不要的数据
	m_num = 0;
	m_sellInfo.Empty();
	UpdateData(FALSE);
}


void CSellDlg::OnBnClickedButton3()
{
	// TODO: 在此添加控件通知处理程序代码
	m_num = 0;
	UpdateData(FALSE);
	m_combo.SetCurSel(0);
	OnCbnSelchangeCombo2();
}
